package com.opengroupe.service.tablet;

import java.util.List;

import org.springframework.dao.DataAccessException;

import com.opengroupe.entities.Candidat;
import com.opengroupe.entities.CandidatReponseQuestion;
import com.opengroupe.entities.CandidatReponseQuestionId;
import com.opengroupe.entities.Categorie;
import com.opengroupe.entities.Question;
import com.opengroupe.entities.Reponse;

/**
 * Ensemble des fonctionnalités accéssibles à l'utilisateur de l'application
 *
 */
public interface TabletService {
	

	/**
	 * Permet d'affecter une categorie de questions à un candidat
	 * @param candidat
	 * @param categorie
	 * @throws {@link DataAccessException}
	 * @return {@link List<CandidatReponseQuestion>}
	 */
	public List<CandidatReponseQuestion> affecterQuestionnaire(Candidat candidat, Categorie categorie)throws DataAccessException;

	
	/**
	 * Permet d'attribuer une réponse à une question emise à un candidat
	 * @throws Exception 
	 */
	public List<CandidatReponseQuestionId> repondreQuestion(Candidat candidat, Question question, List<Reponse> reponses) throws DataAccessException, Exception;
	
	
	/**
	 * Retrieves {@link CandidatReponseQuestion} for the specified {@link Candidat} 
	 * to the specified {@link Question}
	 * 
	 * @param candidat
	 * @param question
	 * @return {@link List}
	 */
	public List<CandidatReponseQuestion> deleteCRQs(Candidat candidat, Question question);
	
	/**
	 * Créer un nouveau candidat dans la BD. 
	 * @param candidat
	 * @throws {@link DataAccessException}
	 * @return {@link Candidat}
	 * @throws Exception 
	 */
	public Candidat creerCandidat(Candidat candidat) throws Exception;

}
